﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Negocio.View;
using Negocio.Generico;
using PresentacionWindows.Base;
using Integra.Comun;
using PresentacionWindows.Reports;
using CrystalDecisions.CrystalReports.Engine;
using CrystalDecisions.Shared;

namespace PresentacionWindows
{
    public partial class uscNotas : UserControlBase
    {
        #region Propiedades

        bool bEditando = false;
        DataTable dtAsignaturas = null;
        public frmMain formulario = null;
        private RenglonDocumentacionDTO renglonDocActivo = null;

        #endregion

        #region Inicializacion

        public uscNotas(PersonaDTO tokenUsuario)
        {
            this.TokenUsuario = tokenUsuario;
            InitializeComponent();
            DSToBinding();
        }

        #endregion

        #region Eventos

        private void btnAgregar_Click(object sender, EventArgs e)
        {
            bEditando = false;
            RenglonDocumentacionDTO filtro = ObtenerRenglonDocumentacionSelect();
            frmRenglonDocumentacion frm=null;
            if (filtro.CalificacionPractica != null)
            {
                frm = new frmRenglonDocumentacion(filtro, true);
            }
            else 
            {
                frm = new frmRenglonDocumentacion(filtro, false);
            }
            frm.Show();
        }

        private void btnModificar_Click(object sender, EventArgs e)
        {
            if (grdNotas.Rows.Count > 0 && grdNotas.SelectedRows.Count >= 1)
            {
                bEditando = true;
                frmRenglonDocumentacion frm = new frmRenglonDocumentacion(ObtenerRenglonDocumentacionSelect(), false);
                frm.ShowDialog();

            }
            else { MessageBox.Show("No hay registros para seleccionar"); }
        }

        private void btnCerrar_Click(object sender, EventArgs e)
        {
            this.Dispose();
        }

        private void btnGuardar_Click(object sender, EventArgs e)
        {
            try
            {
                GenericaView obj = GenericaView.GetInstance();
                AsignaturaDTO bean = null;
                if (!bEditando)
                {
                    bean = new AsignaturaDTO();
                    bean.Nombre = this.txtNombre.Text;
                    //bean.CreditosAsig = Int32.Parse(this.txtCreditos.Text);
                    //bean.CoTitulacion = Int32.Parse(this.cboTitulacion.SelectedValue.ToString());
                    bean.CoProfesor = this.TokenUsuario.CoProfesor;

                    if (obj.Inserta(bean))
                    {
                        MessageBox.Show("Se ha insertado correctamente la asignatura");
                    }
                }
                else
                {
                    AsignaturaView objLista = AsignaturaView.GetInstance();
                    AsignaturaDTO condiciones = new AsignaturaDTO();
                    condiciones.CoAsignatura = Int32.Parse(this.grdNotas.SelectedRows[0].ToString());

                    AsignaturaDTO[] listaBean = (AsignaturaDTO[])obj.GetSimple(condiciones);

                    bean = listaBean[0];

                    bean.Nombre = this.txtNombre.Text;
                    //bean.CreditosAsig = Int32.Parse(this.txtCreditos.Text);
                    //bean.CoTitulacion = Int32.Parse(this.cboTitulacion.SelectedValue.ToString());
                    bean.CoProfesor = this.TokenUsuario.CoProfesor;
                    if (obj.Actualiza(bean))
                    {
                        MessageBox.Show("Se ha actualizado correctamente la asignatura");
                    }

                }
                RecargaGrid();
                BloquearControles(false);
            }
            catch (Exception ex)
            {
                throw new Exception(ex.ToString());
            }
        }

        private void btnPublicarWeb_Click(object sender, EventArgs e)
        {
            //TODO: Realiza la publicacion en la web
            //Recorrer cada uno de los valores y marcar como publicado
        }

        private void btnBuscar_Click(object sender, EventArgs e)
        {
            RenglonDocumentacionDTO filtro = new RenglonDocumentacionDTO();
            filtro.CoRenglon = Int32.Parse(this.cboRenglon.SelectedValue.ToString());
            filtro.NombreAlumno = this.txtNombre.Text;
            filtro.Apellido1Alumno = this.txtApellido1.Text;
            filtro.Apellido2Alumno = this.txtApellido2.Text;
            filtro.DniAlumno = this.txtDNI.Text;

            this.RecargaGrid(filtro);
        }

        private void btnBorrar_Click(object sender, EventArgs e)
        {
            this.txtApellido2.Text = "";
            this.txtApellido1.Text = "";
            this.txtNombre.Text = "";
            this.txtDNI.Text = "";

            this.cboRenglon.SelectedValue = 0;
        }

        private void grdNotas_DoubleClick(object sender, EventArgs e)
        {
            //Evento que realiza la muestra para la edicion de 
        }

        #endregion

        #region Metodos privados

        /// <summary>
        /// Inicializa los datos propios del formulario en función de los eventos asociados.
        /// </summary>
        private void DSToBinding()
        {
            #region Carga de combos

            //Carga de los valores del combo del listado de titularidades
            AsignaturaView obj = AsignaturaView.GetInstance();
            AsignaturaDTO filtro = new AsignaturaDTO();
            filtro.CoProfesor = TokenUsuario.CoProfesor;
            this.cboAsignaturas.SelectedIndexChanged -= new System.EventHandler(this.cboAsignaturas_SelectedIndexChanged);
            ControlDatos.CargarCombo(this.cboAsignaturas, obj.GetAsignaturasViewByAsignatura(filtro), "NOMBRE", "CODIGOASIGNATURA", TipoCargaCombo.Normal);
            this.cboAsignaturas.SelectedIndexChanged += new System.EventHandler(this.cboAsignaturas_SelectedIndexChanged);
            //ControlDatos.CargarCombo(this.cboTitulacion, obj.GetViewTitulaciones(new TitulacionDTO()), "NOMBRE", "CODIGOTITULACION", TipoCargaCombo.Normal);

            #endregion

            #region Carga de asignaturas

            RenglonDocumentacionDTO filtroRD = new RenglonDocumentacionDTO();
            RecargaGrid(filtroRD);

            #endregion
        }

        /// <summary>
        /// Metodo que bloquea todos los controles en función del estado en el que nos encontremos
        /// </summary>
        /// <param name="estado">bit de control para el bloqueo</param>
        private void BloquearControles(bool estado)
        {
            //this.txtCreditos.Enabled = estado;
            //this.txtCreditosAsignatura.Enabled = estado;
            //this.txtNombreAsignatura.Enabled = estado;
            //cboTitulacion.Enabled = estado;

            //if (!bEditando)
            //{
            //    txtCreditosAsignatura.Text = "";
            //    txtCreditos.Text = "";
            //    txtNombreAsignatura.Text = "";
            //}
        }


        private void RecargaGrid()
        {
            RenglonDocumentacionDTO filtro = new RenglonDocumentacionDTO();
            filtro.CoRenglon = Int32.Parse(this.cboRenglon.SelectedValue.ToString());
            RecargaGrid(filtro);
        }

        /// <summary>
        /// Método que recarga el grid por completo 
        /// </summary>
        private void RecargaGrid(RenglonDocumentacionDTO filtro)
        {
            try
            {
                RenglonDocumentacionView vista = RenglonDocumentacionView.GetInstance();
                RenglonDocumentacionDTO dto;
                if (filtro == null)
                {
                    dto = new RenglonDocumentacionDTO();
                }
                else
                {
                    dto = filtro;
                }
                this.grdNotas.SelectionChanged -= new System.EventHandler(this.grdNotas_SelectionChanged);
                this.grdNotas.DataSource = null;

                dtAsignaturas = vista.GetRenglonDocumentacionView(dto).Table;
                this.grdNotas.DataSource = vista.GetRenglonDocumentacionView(dto).Table;
                this.grdNotas.Refresh();
                this.grdNotas.SelectionChanged += new System.EventHandler(this.grdNotas_SelectionChanged);
            }
            catch (Exception ex)
            {
                throw new Exception(ex.ToString());
            }
        }

        private RenglonDocumentacionDTO ObtenerRenglonDocumentacionSelect()
        {
            RenglonDocumentacionDTO objeto = null;
            try
            {
                if (this.grdNotas.Rows.Count > 0)
                {
                    //RenglonDocumentacionView vista = RenglonDocumentacionView.GetInstance();
                    foreach (DataGridViewRow dr in grdNotas.SelectedRows)
                    {
                        objeto = new RenglonDocumentacionDTO();
                        objeto.NombreAlumno = dr.Cells["NOMBREALUMNO"]!=null? dr.Cells["NOMBREALUMNO"].Value.ToString():null;
                        objeto.Apellido1Alumno = dr.Cells["APELLIDO1ALUMNO"]!=null? dr.Cells["APELLIDO1ALUMNO"].Value.ToString():null;
                        objeto.Apellido2Alumno = dr.Cells["APELLIDO2ALUMNO"]!=null? dr.Cells["APELLIDO2ALUMNO"].Value.ToString():null;
                        objeto.DniAlumno = dr.Cells["DNIALUMNO"]!=null?dr.Cells["DNIALUMNO"].Value.ToString():null;
                        objeto.CoAlumno = dr.Cells["COALUMNO"].Value != null ? Int32.Parse(dr.Cells["COALUMNO"].Value.ToString()) : Int32.MinValue;
                        objeto.CoConvocatoria = dr.Cells["COCONVOCATORIA"].Value != null ? Int32.Parse(dr.Cells["COCONVOCATORIA"].Value.ToString()) : Int32.MinValue;
                        objeto.CoRenglon = dr.Cells["CORENGLON"].Value != null ? Int32.Parse(dr.Cells["CORENGLON"].Value.ToString()) : Int32.MinValue;
                        objeto.CoRenglonDocumentacion = dr.Cells["CORENGLONDOCUMENTACION"].Value != null ? Int32.Parse(dr.Cells["CORENGLONDOCUMENTACION"].Value.ToString()) : Int32.MinValue;
                        objeto.FchEntrega = dr.Cells["FCHENTREGA"].Value != null ? DateTime.Parse(dr.Cells["FCHENTREGA"].Value.ToString()) : DateTime.MinValue;
                    }
                }

            }
            catch (Exception ex)
            {
                MessageBox.Show("Se ha producido un error obteniendo el renglon docuemntacion. Excepcion:" + ex.Message);
            }
            return objeto;
        }


        private void cboAsignaturas_SelectedIndexChanged(object sender, EventArgs e)
        {

            RenglonDTO filtro = new RenglonDTO();
            filtro.CoAsignatura = Int32.Parse(cboAsignaturas.SelectedValue.ToString());
            RenglonView vista = RenglonView.GetInstance();
            DataTable dt = vista.GetViewRenglon(filtro).Table;
            this.cboRenglon.SelectedIndexChanged -= new System.EventHandler(this.cboRenglon_SelectedIndexChanged);
            ControlDatos.CargarCombo(this.cboRenglon, dt, "NOMBRE", "CODIGORENGLON", TipoCargaCombo.Normal);
            this.cboRenglon.SelectedIndexChanged += new System.EventHandler(this.cboRenglon_SelectedIndexChanged);

        }

        private void cboRenglon_SelectedIndexChanged(object sender, EventArgs e)
        {
            RecargaGrid();
        }

        private void btnObtenerImpreso_Click(object sender, EventArgs e)
        {
            try
            {
                //Descomentar si queremos obtener un nuevo esquema xsd para actualizarlo.
                //dtAsignaturas.WriteXmlSchema(@"D:\esquema.xsd");
                Notas impreso = new Notas();
                impreso.SetDataSource(dtAsignaturas);
                ParameterFieldDefinition parameter;
                ParameterValues paramValues;
                ParameterDiscreteValue paramValue; 
                try
                {
                    parameter = impreso.DataDefinition.ParameterFields["NombreAsig"];
                    if (parameter != null)
                    {
                        paramValues = parameter.CurrentValues;
                        paramValue = new ParameterDiscreteValue();
                        paramValue.Value = this.cboAsignaturas.SelectedText.ToString();
                        paramValues.Add(paramValue);
                        parameter.ApplyCurrentValues(paramValues);
                    }
                }
                catch { }

                try
                {
                    parameter = impreso.DataDefinition.ParameterFields["NombreRenglon"];
                    if (parameter != null)
                    {
                        paramValues = parameter.CurrentValues;
                        paramValue = new ParameterDiscreteValue();
                        paramValue.Value = this.cboRenglon.SelectedText.ToString();
                        paramValues.Add(paramValue);
                        parameter.ApplyCurrentValues(paramValues);
                    }
                }
                catch { }

                try
                {
                    parameter = impreso.DataDefinition.ParameterFields["NombreProfesor"];
                    if (parameter != null)
                    {
                        paramValues = parameter.CurrentValues;
                        paramValue = new ParameterDiscreteValue();
                        paramValue.Value = TokenUsuario.Nombre;
                        paramValues.Add(paramValue);
                        parameter.ApplyCurrentValues(paramValues);
                    }
                }
                catch { }


                try
                {
                    parameter = impreso.DataDefinition.ParameterFields["ApellidoProfesor"];
                    if (parameter != null)
                    {
                        paramValues = parameter.CurrentValues;
                        paramValue = new ParameterDiscreteValue();
                        paramValue.Value = TokenUsuario.Apellido1;
                        paramValues.Add(paramValue);
                        parameter.ApplyCurrentValues(paramValues);
                    }
                }
                catch { }

                try
                {
                    parameter = impreso.DataDefinition.ParameterFields["Apellido2Profesor"];
                    if (parameter != null)
                    {
                        paramValues = parameter.CurrentValues;
                        paramValue = new ParameterDiscreteValue();
                        paramValue.Value = TokenUsuario.Apellido2;
                        paramValues.Add(paramValue);
                        parameter.ApplyCurrentValues(paramValues);
                    }
                }
                catch { }

                try
                {
                    parameter = impreso.DataDefinition.ParameterFields["Email"];
                    if (parameter != null)
                    {
                        paramValues = parameter.CurrentValues;
                        paramValue = new ParameterDiscreteValue();
                        paramValue.Value = TokenUsuario.Email;
                        paramValues.Add(paramValue);
                        parameter.ApplyCurrentValues(paramValues);
                    }
                }
                catch { }

                ControlReports.VistaPrevia(impreso, formulario);

            }
            catch (Exception ex)
            {
                MessageBox.Show("Se ha producido un error imprimiendo el documetno. Excepcion:" + ex.Message);
            }
        }

        private void grdNotas_SelectionChanged(object sender, EventArgs e)
        {
            renglonDocActivo = ObtenerRenglonDocumentacionSelect();
        }


        #endregion

  

    }
}
